<?php
/**
 * 
 * Класс работы с шаблоном
 * @author mr.Pie
 *
 */
class TPL {
	/** Массив с параметрами страницы */
	static public $page;
	/** Список css файлов */
	static public $css_list;
	/** Список js файлов */
	static public $js_list;
	/** */
	private static $blocks;
  /** Повторяемые элементы */
  static public $tpls;
  /** Переменные */
  static public $vars;
  
  /** 
   * Инициализация класса
   */
  static function Create() {
  	self::$page = array (
  		'title'       => Conf::$site['title'],
  		'keywords'    => Conf::$site['keywords'],
  		'description' => Conf::$site['description'],
  		'navigation'  => '<a href="'.Conf::$site['domain_url'].'">Главная</a>',
  		'head'        => '',
  		'body'        => '',
  		'template'    => ''
  	);
  	self::$css_list = array();
  	self::$js_list  = array();
  	self::$blocks   = array();
  	self::$tpls     = array();
  	self::$vars     = array();
  }
  /**
   * Отображение сайта
   */
  public static function Render() {
  	// css файлы
  	foreach (self::$css_list as $file) {
  		self::$page['head'] .= '<link rel="stylesheet" type="text/css" href="'.$file.'">';	
  	}
  	// js файлы
  	foreach (self::$js_list as $file) {
  		self::$page['head'] .= '<script type="text/javascript" src="'.$file.'"></script>';
  	}
  	// ключевые слова
  	if (self::$page["keywords"] != '') {self::$page['head'] .= '<meta name="Keywords" content="'.self::$page["keywords"].'">';}
  	// описание
  	
  	if (self::$page["description"] != '') {self::$page['head'] .= '<meta name="Description" content="'.self::$page["description"].'">';}
  	// замена блоков
  	self::blockPage();
  	if (file_exists(TEMPLATE_PATH.'/site.html')) {include TEMPLATE_PATH.'/site.html';}
  	else {echo 'ERROR! Template not found.';}
  }
  /** 
   * Загрузка шаблона страницы 
   */
  public static function Load($tpl_name) {
    // полный путь к шаблону
    $tpl_file  = TEMPLATE_PATH.'/'.$tpl_name.'.html';
    if (file_exists($tpl_file)) {
      // открытие шаблона
      $file_open = fopen($tpl_file, 'r');
      // копирование блока
      self::$page['body'] = fread($file_open, filesize($tpl_file));
      fclose($file_open);
      self::LoadBlocks($tpl_name);
      return TRUE;
    }
    return FALSE;
  }
  /** Загрузка блоков из шаблона */
  private static function LoadBlocks($tpl_name) {
  	$block_file = TEMPLATE_PATH.'/blocks/'.$tpl_name.'.php';
  	if (file_exists($block_file)) {
  		include $block_file;
  		if (isset($blocks_arr)) {
  			foreach ($blocks_arr as $name) {self::$blocks[$name] = '';}
  		}
  		if (isset($blocks_tpl)) {
  			foreach ($blocks_tpl as $name => $value) {self::$tpls[$name] = $value;}
  		}
  		if (isset($vars_arr)) {
  			foreach ($vars_arr as $name) {self::$vars[$name] = '';}
  		}
  	}
  	return 0;	
  }
  /** Установка кода блока */
  public static function setBlock($name, $html) {self::$blocks['<tpl:'.$name.'/>'] = $html; return 0;}
  /** Получение кода блока */
  public static function getBlock($name) {return (isset(self::$blocks['<tpl:'.$name.'/>']))?(self::$blocks['<tpl:'.$name.'/>']):(NULL);}
  public static function makeBlock($block_name, $tpl_name, $data, $mode = 'a') {
  	$tpl = self::$tpls[$tpl_name];
		foreach (self::$tpls [$tpl_name.'_arr'] as $o => $v) {
			if (isset ($data[$o])) {$tpl = str_replace( '{'.$o.'}', $data[$o], $tpl);} 
			else {$tpl = str_replace('{'.$o.'}', $v, $tpl);}
		}
		if ($mode == 'a') {self::$blocks['<tpl:'.$block_name.'/>'] .= $tpl;}
		else {self::$blocks['<tpl:'.$block_name.'/>'] = $tpl;}
		return 0;
  }
	/**
	 * Замена блоков в шаблоне
	 */
  public static function blockPage() {
  	if (isset(self::$vars)) {
  		// замена переменных
  		self::$page['body'] = strtr(self::$page['body'], self::$vars);
  	}
		if (isset(self::$blocks)) {
			// замена блоков
			self::$page['body'] = strtr(self::$page['body'], self::$blocks);
		}
		self::$blocks = array();
		self::$tpls   = array ();
		return 0;
	}
}
?>